from app import db
from datetime import datetime

class UploadedFile(db.Model):
    """上传文件模型"""
    __tablename__ = 'uploaded_files'
    
    id = db.Column(db.Integer, primary_key=True)
    filename = db.Column(db.String(255), nullable=False)  # 存储在服务器上的文件名
    original_filename = db.Column(db.String(255), nullable=False)  # 原始文件名
    file_path = db.Column(db.String(500), nullable=False)  # 文件完整路径
    relative_path = db.Column(db.String(500), nullable=False)  # 相对路径，用于URL访问
    file_size = db.Column(db.Integer, default=0)  # 文件大小（字节）
    content_type = db.Column(db.String(100), nullable=False)  # MIME类型
    category = db.Column(db.String(50), nullable=False)  # 文件类别（image, document等）
    description = db.Column(db.Text)  # 文件描述
    is_public = db.Column(db.Boolean, default=False)  # 是否公开
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)  # 上传用户
    upload_time = db.Column(db.DateTime, default=datetime.utcnow)  # 上传时间
    
    # 关系
    user = db.relationship('User', backref=db.backref('uploaded_files', lazy='dynamic'))
    
    def __repr__(self):
        return f'<UploadedFile {self.filename}>'
    
    @property
    def is_image(self):
        """判断是否为图片文件"""
        return self.category == 'image'
    
    @property
    def is_document(self):
        """判断是否为文档文件"""
        return self.category == 'document'
    
    @property
    def size_kb(self):
        """文件大小（KB）"""
        return round(self.file_size / 1024, 2) if self.file_size else 0
    
    @property
    def size_mb(self):
        """文件大小（MB）"""
        return round(self.file_size / (1024 * 1024), 2) if self.file_size else 0
    
    def to_dict(self):
        """转换为字典"""
        return {
            'id': self.id,
            'filename': self.filename,
            'original_filename': self.original_filename,
            'file_path': self.file_path,
            'relative_path': self.relative_path,
            'file_size': self.file_size,
            'size_kb': self.size_kb,
            'size_mb': self.size_mb,
            'content_type': self.content_type,
            'category': self.category,
            'description': self.description,
            'is_public': self.is_public,
            'is_image': self.is_image,
            'is_document': self.is_document,
            'user_id': self.user_id,
            'upload_time': self.upload_time.strftime('%Y-%m-%d %H:%M:%S') if self.upload_time else None
        }